#pragma once

namespace CO { namespace MyGroupNamespace { namespace MyPackageNamespace {


//
// Message handler to allow more modular design.
//
class MyMessageHandler : public SpiFoundation::RoomFW::ActiveObject::MessageHandler
{
public:
	//
	// Smart Pointer type.
	//
	typedef boost::shared_ptr<MyMessageHandler> Ptr;
	typedef SpiFoundation::RoomFW::NullDeleter<MyMessageHandler> NullDeleter;

	//
	// ctor.
	//
	MyMessageHandler(SpiFoundation::RoomFW::ActiveObject* parent);

	//
	// Initialization.
	//
	virtual bool initialize(SpiFoundation::Configuration::ConfigKey& configRoot);

	//
	// Handle messages override.
	//
	virtual bool handle(SpiFoundation::RoomFW::RoomMessageSP message);
	virtual void onError(SpiFoundation::ErrorHandling::IError& e);
	virtual void onException(std::exception& e);
	virtual void onCatchAllException();

private:

	//
	// TODO:  Add private attributes.
	//
	long myConfigValue_;
};

}}} // End namespace
